import pandas as pd
import openai
import time
import os
from tkinter import Tk
from tkinter.filedialog import askopenfilename, askdirectory

# 设置 OpenAI API 密钥
openai.api_key = "sk-J7sdDJr7HHBMvAg2736e9800863f40Fe81E64b87782bF1Fe"  # OpenAI API 密钥
# API 接口设置部分
api_base = "https://api.xiaoai.plus/v1"
openai.api_base = api_base

# 让用户选择Excel文件路径
Tk().withdraw()  # 隐藏根窗口
file_path = askopenfilename(title="Select an Excel File", filetypes=[("Excel Files", "*.xlsx;*.xls")])
if not file_path:
    print("No file selected. Exiting.")
    exit()

# 让用户选择生成文件夹的路径
output_directory = askdirectory(title="Select Output Folder")
if not output_directory:
    print("No output folder selected. Exiting.")
    exit()

# 让用户输入CSV文件名
csv_filename = input("Enter the desired name for the output CSV file (without extension): ")
csv_filename = os.path.join(output_directory, f"{csv_filename}.csv")

# 读取Excel文件
df = pd.read_excel(file_path)

# 提取所需的列，确保数据框中包含 'title', 'content', 和 'img_url' 列
extracted_data = df[['title', 'content', 'img_url']]

ai_training_document = """
你是一个根据文章正文对内容进行伪原创并调整格式，输出富文本化 HTML 正文样式的工具。你需要根据给定的正文内容，进行以下操作：

内容伪原创：通过语义重组、优化表达和句式变化，使文章更简洁易懂，但不失原有的核心信息。

富文本化输出：
输出内容仅包含 <body> 部分的 HTML 代码，不包含文章标题。
使用 HTML 标签格式化文章内容，确保文档结构清晰。
对文章中的关键信息（如金额、公司名等）使用高亮效果（如 <b>）。
使用标题（<h2 style="font-size: 30px;>,<h3 style="font-size: 25px;>,<h4 style="font-size: 22px;>）对段落标题进行标注。
使用段落（<p>）、引用块（<blockquote>）等标签对内容进行恰当的分隔和装饰。
确保文章中有链接时，使用 <a> 标签，并设置为可点击的邮件链接或网页链接。

关键词替换与链接：
如果正文中包含尼古丁相关的大词（如 "nicotine pouches", "Nicotine gum" 等），选择其中两个或多个进行链接，链接到：https://snuffmint.com。
将正文中所有涉及的其他公司信息替换为“Echi”。

样式应用：
使用内嵌的 CSS 样式进行页面的基本布局和文本格式设置，确保内容的可读性和美观。
添加字体样式、颜色、行间距、段落间距等样式，使文本易于阅读并保持一致的格式。
对图像添加适当的尺寸限制，确保图片不会超出页面边界。

输出格式要求：
保持 HTML 格式的正确性，文档结构合理。
输出时仅包含正文部分，禁止输出 HTML 的 <head> 和其他无关内容。
"""
system_message = ai_training_document  # 使用AI训练文档作为系统消息


# 降重改写的函数
def rewrite_content_with_ai(original_text):
    try:
        response = openai.ChatCompletion.create(
            model="gpt-4",
            messages=[
                {"role": "system", "content": system_message},
                {"role": "user", "content": f'Please rewrite the following text to make it more concise and clear, while maintaining its meaning:\n\n{original_text}'}
            ]
        )
        # 获取重写后的文本
        rewritten_text = response['choices'][0]['message']['content'].strip()
        return rewritten_text
    except Exception as e:
        print(f"Error in rewriting text: {e}")
        return original_text  # 在发生错误时返回原文本


# 解码文本中的Unicode字符
def decode_unicode(text):
    return bytes(text, 'utf-8').decode('unicode_escape')

# 保存改写后的数据到CSV文件
def save_to_csv(data, output_file):
    try:
        data.to_csv(output_file, index=False, encoding='utf-8')
        print(f"CSV file saved successfully: {output_file}")
    except Exception as e:
        print(f"Error saving CSV file: {e}")

# 用于存储所有改写后的数据
rewritten_data = []

# 遍历提取的数据，降重并准备保存
for index, row in extracted_data.iterrows():
    title = row['title']
    content = row['content']
    img_url = row['img_url']

    # 使用AI接口对内容进行改写
    print(f"Rewriting article: {title}")
    rewritten_content = rewrite_content_with_ai(content)

    # 解码content中的Unicode字符
    rewritten_content = decode_unicode(rewritten_content)

    # 保存改写后的数据
    rewritten_data.append({
        'title': title,
        'content': rewritten_content,
        'img_url': img_url
    })

    # 暂停，避免超出API请求限制
    time.sleep(1)  # 每次请求后暂停1秒钟

# 将改写后的数据保存到CSV文件
rewritten_df = pd.DataFrame(rewritten_data)
save_to_csv(rewritten_df, csv_filename)

print("Process completed!")
